Scroll to navigation

DIFF(1) Narzędzia GNU DIFF(1)

NAZWA

diff - szukanie różnic pomiędzy dwoma plikami

SKŁADNIA

diff [opcje] plik1 plik2

OPIS

Dokumentacja niniejsza nie jest już utrzymywana i może być niedokładna lub niekompletna. Autorytatywnym źródłem jest obecnie dokumentacja Texinfo. Dostęp do niej uzyskasz wpisując w wierszu poleceń:

pinfo diff
lub
info diff.
W najprostszym przypadku diff porównuje zawartość dwóch plików, plik1 i plik2. Nazwa pliku - oznacza tekst odczytywany ze standardowego wejścia. W specjalnym przypadku "diff - -" porównuje kopię standardowego wyjścia ze samym sobą.

Jeśli plik1 jest katalogiem a plik2 nie, diff porównuje plik z katalogu plik1, którego nazwa jest taka sama, jak plik2, i odwrotnie. Plik nie będący katalogiem nie może być -.

Jeśli zarówno plik1 jak i plik2 są katalogami, diff porównuje odpowiednie pliki w obu katalogach, w kolejności alfabetycznej. To porównanie nie jest rekurencyjne, chyba że podano opcję -r lub --recursive. diff nigdy nie porównuje zawartości katalogu tak, jakby był on plikiem. Podany plik nie może być standardowym wejściem, ponieważ standardowe wejście nie ma nazwy i nie dotyczy go zapis `plik o tej samej nazwie'.

Opcje diff na ogół zaczynają się od -, więc zwykle nazwy plików plik1 oraz plik2 nie mogą zaczynać się od -, jednak argument -- traktuje pozostałe argumenty jako nazwy plików, nawet jeśli zaczynają się one od -.

OPCJE

Poniżej znajduje się podsumowanie wszystkich opcji akceptowanych przez GNU diff. Większość opcji posiada dwie równoważne formy, jedną z nich jest pojedyncza litera poprzedzona kreską -, a drugą pełna nazwa poprzedzona przez --. Wiele pojedynczych liter opcji (nie wymagających argumentu) może być łączonych w pojedynczym słowie: `-ac' jest równoważne z `-a -c'. Opcje w formie pełnej nazwy mogą być skracane do dowolnego unikalnego przedrostka. Klamry ([ i ]) oznaczają, że opcja pobiera opcjonalny argument.


Ignorowanie zmian w wielkości liter, duże i małe litery są uznawane za równoważne.

Ignorowanie wszystkich odstępów przy porównywaniu plików.

Ignorowanie zmian w ilości odstępów.

Ignorowanie zmian, które jedynie dodają lub usuwają puste linie.

Ignorowanie zmian, które jedynie dodają lub usuwają linie pasujące do wyrażenia regularnego regexp.
diff normalnie czyta i zapisuje wszystkie dane jako tekst. Ta opcja wymusza odczyt i zapis danych w trybie binarnym. Nie ma efektu na systemach zgodnych z POSIX, jak GNU czy tradycyjne Uniksy. Jednak wiele systemów operacyjnych komputerów osobistych oznacza koniec linii dwuznakową sekwencją: znakiem powrotu karetki plus znak nowej linii. Na takich systemach diff normalnie ignoruje powroty karetki na wejściu i generuje je na końcu każdej linii wyjściowej, ale z opcją --binary traktuje powrót karetki jak każdy inny znak wejściowy i nie dokłada go na końcu tworzonych linii. Przydatne do operowania na plikach nie-tekstowych, które mają być wymieniane z systemami POSIX-owymi.
Do porównywania dwu plików bajt po bajcie służy polecenie cmp(1).

Traktowanie wszystkich plików jako pliki tekstowe i porównywanie ich linia po linii, nawet jeśli nie wyglądają one na pliki tekstowe.



Użycie kontekstowego formatu wyjściowego z pokazaniem ilości linii kontekstu podanej w linie (wartość całkowita), lub trzy jeśli nie podano linie. Do prawidłowego działania patch potrzebuje co najmniej dwóch linii kontekstu.


Użycie zunifikowanego formatu wyjściowego i pokazanie ilości linii kontekstu podanej w linie (wartość całkowita), lub trzy jeśli nie podano linie. Do prawidłowego działania patch potrzebuje co najmniej dwóch linii kontekstu.
-linie
Wyświetlenie ilości linii kontekstu podanej w linie (wartość całkowita). Ta opcja nie ustala wyjściowego formatu, nie ma ona efektu jeśli nie podano opcji -c lub -u. Ta opcja jest przestarzała. Do prawidłowego działania patch potrzebuje co najmniej dwóch linii kontekstu.

Użycie tekstu etykieta w miejsce nazwy plików w nagłówku formatu kontekstowego i zunifikowanego.

Pokazanie, do jakiej funkcji C należy każda ze zmian.

Pokazanie ostatniej poprzedzającej linii, która pasuje do wyrażenia regularnego regexp dla każdego różniącego się fragmentu w formacie kontekstowym i zunifikowanym.

Poinformowanie jedynie o tym, czy pliki się różnią, bez podawania szczegółów na temat różnic.

Stworzenie wyjścia, które jest poprawnym skryptem ed.

Stworzenie wyjścia, które wygląda prawie tak jak skrypt ed, ale zawiera modyfikacje w kolejności pojawiania się zmian w pliku.

Wyprowadzenie różnic w formacie RCS, tak jak -f, z tym wyjątkiem, że każda komenda wyszczególnia numer linii, której dotyczy.

Użycie formatu wyjściowego jeden obok drugiego.

Użycie szerokości wyjścia kolumny w formacie jedna obok drugiej.
Wyświetlenie jedynie lewej kolumny z dwóch wspólnych w formacie jedna obok drugiej.
Nie wyświetlanie wspólnych linii w formacie jedna obok drugiej.

Stworzenie połączonego wyjścia w formacie preprocesora nazwa.
Użycie formatu formatgrupy do wyprowadzenia grupy linii wziętej jedynie z pierwszego pliku. Pomocne w tworzeniu plików wynikowych o konstrukcji typu if-then-else.
Użycie formatu formatgrupy do wyprowadzenia grupy linii wziętej jedynie z drugiego pliku. Pomocne w tworzeniu plików wynikowych o konstrukcji typu if-then-else.
Użycie formatu wyjściowego formatgrupy do wyświetlania grupy linii zawierających różniące się linie z obu plików. Pomocne w tworzeniu plików wynikowych o konstrukcji typu if-then-else.
Użycie formatu formatgrupy do wyprowadzenia wspólnej grupy linii wziętej z obu plików. Pomocne w tworzeniu plików wynikowych o konstrukcji typu if-then-else.

Format grupy linii
W formacie określającym sposób wypisania grupy linii zwykłe znaki oznaczają same siebie; specyfikacje konwersji zaczynają się od znaku procentu % i mają jedną z poniższych postaci:

%<
linie z plik1, łącznie z końcowym znakiem nowej linii, formatowane zgodnie z formatem starych linii
%>
linie z plik2, formatowane zgodnie z formatem nowych linii
%=
linie wspólne dla obu plików, formatowane zgodnie z formatem linii niezmienionych
%[-][szer][.[dokł]]{doxX}litera
wartość określona literą, sformatowana w stylu printf. litery mają, w odniesieniu do grup linii w nowym pliku, następujące znaczenie (dla grup w starym pliku używa się małych liter):

F numer pierwszej linii
L numer ostatniej linii
N ilość linii = L-F+1
E F-1
M L+1
%%
pojedynczy dosłowny znak procentu %.
%c'C'
gdzie C jest pojedynczym znakiem, oznacza C. Nie może to być odwrotny ukośnik ani apostrof. Na przykład, %c':' oznacza dwukropek, nawet wewnątrz części then formatu if-then-else, którą normalnie by kończył.
%c'\O'
gdzie O jest łańcuchem 1, 2 lub 3 cyfr ósemkowych, oznacza znak o kodzie ósemkowym O. Na przykład, %c'\0' oznacza znak null.
(A=B?T:E)
Jeśli A równa się B, to T, w przeciwnym razie E. A i B są albo obie stałymi podanymi dziesiętnie albo pojedynczymi literami, interpretowanymi jak wyżej.
Użycie formatu formatlinii do wyprowadzenia wszystkich linii. To samo, co równoczesne użycie wszystkich opcji formatowania linii (--old-line-format, --new-line-format, --unchanged-line-format) z tym samym formatem. Pomocne w tworzeniu plików wynikowych o konstrukcji typu if-then-else.
Użycie formatu formatlinii do wyprowadzenia linii wziętej jedynie z pierwszego pliku. Pomocne w tworzeniu plików wynikowych o konstrukcji typu if-then-else.
Użycie formatu formatlinii do wyprowadzenia linii wziętej jedynie z drugiego pliku. Pomocne w tworzeniu plików wynikowych o konstrukcji typu if-then-else.
Użycie formatu formatlinii do wyprowadzenia wspólnej linii wziętej z obu plików. Pomocne w tworzeniu plików wynikowych o konstrukcji typu if-then-else.

Format linii
W formacie określającym sposób wypisania linii zwykłe znaki oznaczają same siebie; specyfikacje konwersji zaczynają się od znaku procentu % i mają jedną z poniższych postaci:

%l
zawartość danej linii, nie licząc kończącego ją znaku nowej linii (jeśli jest takowy). Ten format ignoruje czy linia jest niekompletna czy poprawnie zakończona.
%L
zawartość danej linii, łącznie z kończącym ją znakiem nowej linii (jeśli jest takowy). Jeżeli linia jest niekompletna, to zachowuje tę niekompletność.
%[-][szer][.[dokł]]{doxX}n
numer linii wejściowej, sformatowany w stylu printf.
%%
dosłowny znak procentu %.
%c'C'
dosłowny znak C. Nie może to być odwrotny ukośnik ani apostrof.
%c'\O'
znak o kodzie ósemkowym O.


Przesłanie wyjścia przez pr, aby podzielić je na strony.

Rozszerzanie tabulatorów do spacji na wyjściu, aby zachować oryginalne ułożenie tabulatorów pliku wejściowego.

Wyprowadzenie tabulatora zamiast spacji przed tekstem linii w formacie normalnym lub kontekstowym. Powoduje to normalny wygląd tabulatorów w linii.


Rekurencyjne porównanie wszystkich podkatalogów, jeśli porównywane są katalogi.

Jeśli podczas porównywania katalogów plik istnieje jedynie w jednym z katalogów, będzie traktowany tak, jakby był obecny w drugim katalogu, ale pusty.

Jeśli podczas porównywania katalogów plik istnieje jedynie w drugim katalogu, będzie traktowany tak, jakby był obecny w pierwszym katalogu, ale pusty.

Poinformowanie, jeśli oba pliki są identyczne.

Podczas porównywania katalogów, ignorowanie plików i podkatalogów, których nazwy pasują do wzorca wzorzec.

Podczas porównywania katalogów, ignorowanie plików i podkatalogów, których nazwa pasuje do jednego z wzorców podanych w pliku plik.

Podczas porównywania katalogów rozpoczęcie od pliku plik. Opcja ta jest użyteczna podczas wznawiania przerwanego porównania.

Nie ignorowanie ostatnich linie linii wspólnego przedrostka oraz pierwszych linie linii wspólnego przyrostka.

Zmiana algorytmu na taki, który może czasami znaleźć mniejszą liczbę zmian. Spowalnia to działania diff (czasami bardzo znacznie).

Użycie algorytmów heurystycznych aby przyspieszyć przeszukiwanie dużych plików ze znaczną liczbą rozrzuconych małych zmian.

Ta opcja aktualnie nie ma żadnego efektu, ale istnieje dla zgodności z systemem Unix.
Wyświetlenie dodatkowych informacji pomocnych dla sdiff. sdiff korzysta z tej opcji gdy uruchamia diff. Użytkownicy nie powinni korzystać z tej opcji bezpośrednio.

Wyświetlenie informacji o stosowaniu programu i dostępnych opcjach.

Wyświetlenie numeru wersji programu.

KOPIOWANIE

Plik ten powstał na podstawie podręcznika info pakietu diffutils.

Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.

Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Foundation.

ZOBACZ TAKŻE

cmp(1), comm(1), diff3(1), ed(1), patch(1), pr(1), sdiff(1).

DIAGNOSTYKA

Zwracana wartość 0 oznacza, że nie odnaleziono różnic, 1 oznacza znalezienie różnic, a 2 kłopoty.

1 października 1994 Narzędzia różnicowe GNU